home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / moden / examples / modlist.pas < prev    next >
Pascal/Delphi Source File  |  1996-04-08  |  10KB  |  428 lines

  1. {$G+,X+,F+}
  2.  
  3. {Conditional defines that may affect this unit}
  4. {$I AWDEFINE.INC}
  5.  
  6. {*********************************************************}
  7. {*                   MODLIST.PAS 1.01                    *}
  8. {*        Copyright (c) TurboPower Software 1995         *}
  9. {*                 All rights reserved.                  *}
  10. {*********************************************************}
  11.  
  12. unit Modlist;
  13.  
  14. interface
  15.  
  16. uses
  17.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  18.   Forms, Dialogs, Menus, StdCtrls, AdMisc, AdModDB, ModInfo;
  19.  
  20. type
  21.   TMainForm = class(TForm)
  22.     MainMenu: TMainMenu;
  23.     FileMenu: TMenuItem;
  24.     NewDB: TMenuItem;
  25.     OpenDB: TMenuItem;
  26.     SaveDB: TMenuItem;
  27.     SaveDBAs: TMenuItem;
  28.     N1: TMenuItem;
  29.     ExitProgram: TMenuItem;
  30.     EditMenu: TMenuItem;
  31.     AddModem: TMenuItem;
  32.     ChangeModem: TMenuItem;
  33.     DeleteModem: TMenuItem;
  34.     ModemList: TListBox;
  35.     AddBtn: TButton;
  36.     ChangeBtn: TButton;
  37.     DeleteBtn: TButton;
  38.     OpenDialog: TOpenDialog;
  39.     SaveDialog: TSaveDialog;
  40.     Database: TApdModemDBase;
  41.     procedure FormCreate(Sender: TObject);
  42.     procedure NewDBClick(Sender: TObject);
  43.     procedure OpenDBClick(Sender: TObject);
  44.     procedure SaveDBClick(Sender: TObject);
  45.     procedure SaveDBAsClick(Sender: TObject);
  46.     procedure ExitProgramClick(Sender: TObject);
  47.     procedure AddModemClick(Sender: TObject);
  48.     procedure ChangeModemClick(Sender: TObject);
  49.     procedure DeleteModemClick(Sender: TObject);
  50.     procedure AddBtnClick(Sender: TObject);
  51.     procedure ChangeBtnClick(Sender: TObject);
  52.     procedure DeleteBtnClick(Sender: TObject);
  53.     procedure FormDestroy(Sender: TObject);
  54.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  55.     procedure ModemListDblClick(Sender: TObject);
  56.   public
  57.     HaveFName : Boolean;
  58.     Modified  : Boolean;
  59.     FName     : TFileName;
  60.  
  61.     procedure DoneModem;
  62.       {-Destroy the current modem}
  63.     procedure NewModemPrim;
  64.       {-Create a new modem database}
  65.     procedure SaveModemPrim;
  66.       {-Save the current modem database}
  67.     procedure SaveModemAsPrim;
  68.       {-Save the current modem database under a new name}
  69.     function CheckSave : Boolean;
  70.       {-See if the user wants to save a modified database}
  71.  
  72.     procedure AddModemPrim;
  73.       {-Add a modem to the database}
  74.     procedure ChangeModemPrim;
  75.       {-Change a modem record}
  76.     procedure DeleteModemPrim;
  77.       {-Delete a modem record}
  78.   end;
  79.  
  80. var
  81.   MainForm: TMainForm;
  82.  
  83. implementation
  84.  
  85. {$R *.DFM}
  86.  
  87. const
  88.   BufSize = 8 * 1024;
  89.  
  90. procedure CopyDBase(const SrcName, DestName : String);
  91.   {-Copy a database file}
  92. var
  93.   InFile    : File;
  94.   OutFile   : File;
  95.   Buf       : Pointer;
  96.   BytesRead : Word;
  97.  
  98. begin
  99.   {allocate memory for the copy buffer}
  100.   GetMem(Buf, BufSize);
  101.  
  102.   {try to open the input file}
  103.   try
  104.     Assign(InFile, SrcName);
  105.     Assign(OutFile, DestName);
  106.     Reset(InFile, 1);
  107.   except
  108.     FreeMem(Buf, BufSize);
  109.     raise;
  110.   end;
  111.  
  112.   {try to open the output file}
  113.   try
  114.     Rewrite(OutFile, 1);
  115.   except
  116.     FreeMem(Buf, BufSize);
  117.     try Close(InFile); except end;
  118.     raise;
  119.   end;
  120.  
  121.   {copy data from source to destination}
  122.   try
  123.     while not Eof(InFile) do begin
  124.       BlockRead(InFile, Buf^, BufSize, BytesRead);
  125.       BlockWrite(OutFile, Buf^, BytesRead);
  126.     end;
  127.  
  128.     FreeMem(Buf, BufSize);
  129.     Close(InFile);
  130.     Close(OutFile);
  131.   except
  132.     FreeMem(Buf, BufSize);
  133.     Close(InFile);
  134.     Close(OutFile);
  135.     raise;
  136.   end;
  137. end;
  138.  
  139. procedure TMainForm.DoneModem;
  140.   {-Destroy the current modem}
  141. var
  142.   F : File;
  143.  
  144. begin
  145.   {if the database is open, delete the temporary file}
  146.   if Database.Open then begin
  147.     System.Assign(F, Database.FileName);
  148.     try
  149.       System.Erase(F);
  150.     except
  151.     end;
  152.  
  153.     {close the database}
  154.     Database.Open := False;
  155.  
  156.     {no modem names in list}
  157.     ModemList.Items.Clear;
  158.   end;
  159. end;
  160.  
  161. procedure TMainForm.NewModemPrim;
  162.   {-Create a new modem database}
  163. var
  164.   UntitledFName : array[0..144] of Char;
  165.  
  166. begin
  167.   DoneModem;
  168.  
  169.   {get a temporary filename for the database and add to that}
  170.   GetTempFileName(#0, 'MOD', 0, UntitledFName);
  171.   Database.FileName := StrPas(UntitledFName);
  172.   Database.Open     := True;
  173.  
  174.   HaveFName := False;
  175.   Modified  := False;
  176.   Caption   := 'Untitled';
  177. end;
  178.  
  179. procedure TMainForm.SaveModemPrim;
  180.   {-Save the current modem database}
  181. begin
  182.   {if we don't have a filename, do save as...}
  183.   if not HaveFName then
  184.     SaveModemAsPrim
  185.   else begin
  186.     Cursor := crHourglass;
  187.  
  188.     try
  189.       CopyDBase(Database.Filename, FName);
  190.       Modified := False;
  191.     except
  192.       Cursor := crDefault;
  193.       raise;
  194.     end;
  195.  
  196.     Cursor := crDefault;
  197.   end;
  198. end;
  199.  
  200. procedure TMainForm.SaveModemAsPrim;
  201.   {-Save the current modem database under a new name}
  202. begin
  203.   if not HaveFName then
  204.     SaveDialog.Filename := ''
  205.   else
  206.     SaveDialog.FileName := JustFilename(FName);
  207.   SaveDialog.InitialDir := JustPathname(FName);
  208.  
  209.   if SaveDialog.Execute then begin
  210.     HaveFName := True;
  211.     FName     := SaveDialog.Filename;
  212.     try
  213.       SaveModemPrim;
  214.       Caption := JustFilename(FName);
  215.     except
  216.       HaveFName := False;
  217.       raise;
  218.     end;
  219.   end;
  220. end;
  221.  
  222. function TMainForm.CheckSave : Boolean;
  223.   {-See if the user wants to save a modified database}
  224. var
  225.   Res : Word;
  226.  
  227. begin
  228.   Res := Application.MessageBox('The current database has not been saved. Do you want to save it?',
  229.                                 'Warning', mb_IconQuestion or mb_YesNoCancel);
  230.   CheckSave := (Res <> id_Cancel);
  231.   if (Res = id_Yes) then
  232.     SaveModemPrim;
  233. end;
  234.  
  235. procedure TMainForm.AddModemPrim;
  236.   {-Add a modem to the database}
  237. var
  238.   Frm       : TModemForm;
  239.   ModemData : TModemInfo;
  240.  
  241. begin
  242.   {initialize data structure}
  243.   FillChar(ModemData, SizeOf(TModemInfo), 0);
  244.  
  245.   Frm := TModemForm.Create(Self, ModemData, Database);
  246.   if (Frm.ShowModal = mrOK) then begin
  247.     {add the modem to the database}
  248.     Database.AddModem(ModemData);
  249.  
  250.     {add the modem's name to the listbox}
  251.     ModemList.Items.Add(ModemData.Name);
  252.  
  253.     {change the highlighted item in the listbox}
  254.     ModemList.ItemIndex := ModemList.Items.IndexOf(ModemData.Name);
  255.     Modified := True;
  256.   end;
  257.   Frm.Free;
  258. end;
  259.  
  260. procedure TMainForm.ChangeModemPrim;
  261.   {-Change a modem record}
  262. var
  263.   Frm       : TModemForm;
  264.   ModemData : TModemInfo;
  265.   Name      : TModemName;
  266.  
  267. begin
  268.   if (ModemList.ItemIndex = -1) then begin
  269.     MessageBeep(0);
  270.     Exit;
  271.   end;
  272.  
  273.   Name := ModemList.Items[ModemList.ItemIndex];
  274.   {read the record from the database}
  275.   Database.GetModem(Name, ModemData);
  276.  
  277.   Frm := TModemForm.Create(Self, ModemData, Database);
  278.   if (Frm.ShowModal = mrOK) then begin
  279.     Database.UpdModem(Name, ModemData);
  280.  
  281.     {update the listbox if the name of the modem has changed}
  282.     if (Name <> ModemData.Name) then begin
  283.       ModemList.Items.Delete(ModemList.ItemIndex);
  284.       ModemList.Items.Add(ModemData.Name);
  285.       ModemList.ItemIndex := ModemList.Items.IndexOf(ModemData.Name);
  286.     end;
  287.  
  288.     Modified := True;
  289.   end;
  290. end;
  291.  
  292. procedure TMainForm.DeleteModemPrim;
  293.   {-Delete a modem record}
  294. var
  295.   Name : TModemName;
  296.  
  297. begin
  298.   if (ModemList.ItemIndex =-1) then begin
  299.     MessageBeep(0);
  300.     Exit;
  301.   end;
  302.  
  303.   if (Application.MessageBox('Do you really want to delete this modem record?',
  304.                              'Confirm', mb_IconQuestion or mb_YesNo) = id_Yes) then begin
  305.     Name := ModemList.Items[ModemList.ItemIndex];
  306.     Database.DelModem(Name);
  307.     ModemList.Items.Delete(ModemList.Items.IndexOf(Name));
  308.     Modified := True;
  309.   end;
  310. end;
  311.  
  312. procedure TMainForm.FormCreate(Sender: TObject);
  313. begin
  314.   NewModemPrim;
  315. end;
  316.  
  317. procedure TMainForm.NewDBClick(Sender: TObject);
  318. begin
  319.   if Modified then
  320.     if not CheckSave then
  321.       Exit;
  322.  
  323.   NewModemPrim;
  324. end;
  325.  
  326. procedure TMainForm.OpenDBClick(Sender: TObject);
  327. var
  328.   TempFName : array[0..144] of Char;
  329.  
  330. begin
  331.   if Modified then
  332.     if not CheckSave then
  333.       Exit;
  334.  
  335.   OpenDialog.FileName := '*.ini';
  336.   if OpenDialog.Execute then begin
  337.     FName := OpenDialog.FileName;
  338.     DoneModem;
  339.     Cursor := crHourGlass;
  340.  
  341.     try
  342.       {get a temporary file name and copy the database there}
  343.       GetTempFileName(#0, 'MOD', 0, TempFName);
  344.       CopyDBase(FName, StrPas(TempFName));
  345.  
  346.       {open the database under the temporary name}
  347.       Database.Filename := TempFName;
  348.       Database.Open     := True;
  349.  
  350.       {load the list of modems into the listbox}
  351.       ModemList.Items     := Database.Modems;
  352.       ModemList.ItemIndex := -1;
  353.  
  354.       HaveFName := True;
  355.       Caption   := JustFilename(FName);
  356.     except
  357.       NewModemPrim;
  358.     end;
  359.  
  360.     Cursor := crDefault;
  361.   end;
  362. end;
  363.  
  364. procedure TMainForm.SaveDBClick(Sender: TObject);
  365. begin
  366.   SaveModemPrim;
  367. end;
  368.  
  369. procedure TMainForm.SaveDBAsClick(Sender: TObject);
  370. begin
  371.   SaveModemAsPrim;
  372. end;
  373.  
  374. procedure TMainForm.ExitProgramClick(Sender: TObject);
  375. begin
  376.   Close;
  377. end;
  378.  
  379. procedure TMainForm.AddModemClick(Sender: TObject);
  380. begin
  381.   AddModemPrim;
  382. end;
  383.  
  384. procedure TMainForm.ChangeModemClick(Sender: TObject);
  385. begin
  386.   ChangeModemPrim;
  387. end;
  388.  
  389. procedure TMainForm.DeleteModemClick(Sender: TObject);
  390. begin
  391.   DeleteModemPrim;
  392. end;
  393.  
  394. procedure TMainForm.AddBtnClick(Sender: TObject);
  395. begin
  396.   AddModemPrim;
  397. end;
  398.  
  399. procedure TMainForm.ChangeBtnClick(Sender: TObject);
  400. begin
  401.   ChangeModemPrim;
  402. end;
  403.  
  404. procedure TMainForm.DeleteBtnClick(Sender: TObject);
  405. begin
  406.   DeleteModemPrim;
  407. end;
  408.  
  409. procedure TMainForm.FormDestroy(Sender: TObject);
  410. begin
  411.   DoneModem;
  412. end;
  413.  
  414. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  415. begin
  416.   if Modified then
  417.     CanClose := CheckSave
  418.   else
  419.     CanClose := True;
  420. end;
  421.  
  422. procedure TMainForm.ModemListDblClick(Sender: TObject);
  423. begin
  424.   ChangeModemPrim;
  425. end;
  426.  
  427. end.
  428.